使用图片节点
在这篇教程中,我们将学习如何在 Dora SSR 游戏引擎中使用 Sprite(图元)节点类来创建并渲染游戏中的图形元素。Sprite 节点是游戏场景中的基本构建块,用于渲染纹理(例如图片、图案)到屏幕上。
1. 什么是 Sprite?
Sprite 是一个继承自 Node
的类,表示游戏场景中的图形元素。它可以加载图片文件作为纹理并将其显示在游戏场景中。通过 Sprite 类,您可以控制纹理的绘制方式、位置、环绕模式、混合模式等。
1.1 Sprite 的一些核心属性和功能:
- texture: 渲染的纹理对象(例如图片文件)。
- textureRect: 定义渲染的纹理矩形区域,默认为渲染整个纹理。
- blendFunc: 控制纹理的混合模式,用于控制纹理渲染时的透明度效果。
- effect: 设置渲染时使用的着色器特效。
- uwrap/vwrap: 分别控制 U 和 V 轴的纹理环绕模式。
- filter: 控制纹理的过滤模式,用于控制纹理在放大缩小时的采样方式。
2. 准备工作
在开始之前,确保您已经在项目中正确导入了 Sprite 类。代码示例如下:
- Lua
- Teal
- TypeScript
- YueScript
local Sprite <const> = require("Sprite")
local Sprite <const> = require("Sprite")
import { Sprite } from "Dora";
_ENV = Dora
3. 创建一个基础 Sprite
首先,我们来创建一个简单的 Sprite 来渲染一张图片。假设我们有一张图片文件 "Image/hero.png"
,我们可以这样加载它:
- Lua
- Teal
- TypeScript
- YueScript
-- 创建一个新的 Sprite 对象,并加载 "Image/hero.png" 作为纹理
local heroSprite = Sprite("Image/hero.png")
-- 将 Sprite 添加到场景中
scene:addChild(heroSprite)
-- 创建一个新的 Sprite 对象,并加载 "Image/hero.png" 作为纹理
local heroSprite = Sprite("Image/hero.png")
if not heroSprite is nil then
-- 将 Sprite 添加到场景中
scene:addChild(heroSprite)
end
// 创建一个新的 Sprite 对象,并加载 "Image/hero.png" 作为纹理
const heroSprite = Sprite("Image/hero.png");
if (heroSprite !== null) {
// 将 Sprite 添加到场景中
scene.addChild(heroSprite);
}
-- 创建一个新的 Sprite 对象,并加载 "Image/hero.png" 作为纹理
heroSprite = Sprite "Image/hero.png"
-- 将 Sprite 添加到场景中
scene\addChild heroSprite
在这个示例中,heroSprite
通过 Sprite("Image/hero.png")
创建,并将 "Image/hero.png"
图片文件加载为纹理。接着,我们将这个 Sprite 添加到场景中进行渲染。
在实际开发中,加载图片可能需要一些时间。您可以使用 Cache:loadAsync()
方法异步加载图片,以避免阻塞主线程。
- Lua
- Teal
- TypeScript
- YueScript
local Sprite <const> = require("Sprite")
local thread <const> = require("thread")
-- 异步加载图片
local imagePath = "Image/hero.png"
thread(function()
if Cache:loadAsync(imagePath) then
local character = Sprite(imagePath)
character.position = Vec2(100, 200)
stage:addChild(character)
else
print("异步加载图片失败!")
end
end)
local Sprite <const> = require("Sprite")
local thread <const> = require("thread")
-- 异 步加载图片
local imagePath = "Image/hero.png"
thread(function()
if Cache:loadAsync(imagePath) then
local character = Sprite(imagePath)
character.position = Vec2(100, 200)
stage:addChild(character)
else
print("异步加载图片失败!")
end
end)
import { Sprite, Vec2, Cache, thread } from "Dora";
// 异步加载图片
const imagePath = "Image/hero.png";
thread(() => {
if (Cache.loadAsync(imagePath)) {
const character = Sprite(imagePath);
if (character !== null) {
character.position = Vec2(100, 200);
stage.addChild(character);
}
} else {
print("异步加载图片失败!");
}
});
_ENV = Dora
-- 异步加载图片
imagePath = "Image/hero.png"
thread ->
if Cache\loadAsync imagePath
stage\addChild with Sprite imagePath
.position = Vec2 100, 200
else
print "异步加载图片失败!"